package com.crm.dao.mapper.customMapper.returnMoneyManagerCustomMapper;

import com.crm.model.entity.returnMoney.ReturnMoney;
import com.crm.model.qo.productManager.AnalyseReturnMoneyProductQO;
import com.crm.model.vo.orderManager.PerformanceRankVO;
import com.crm.model.vo.productManager.AnalyseReturnMoneyProductVO;
import com.crm.model.vo.productManager.PerformanceAnalysisVO;
import com.crm.model.vo.returnMoney.ReturnMoneyVO;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @ Author ：pym
 * @ Date   ：2021/9/24 9:47
 */
public interface ReturnMoneyCustomMapper {

    /**
     * 根据主键Id修改提成发放状态
     * @Author pym
     * @Date  2021/9/24 10:11
     * @param returnMoneyId 回款记录表主键
     * @param royaltyStatus 提成发放状态
     * @param accountId 更新人
     * @param updateTm 更新时间
     * @return {@link {int}}
     */
    int updateRoyaltyStatusByReturnMoneyId(@Param("returnMoneyId") List<String> returnMoneyId, @Param("royaltyStatus") int royaltyStatus,
                                           @Param("accountId") String accountId, @Param("updateTm") Date updateTm);

    /**
     * 报表统计 - 业绩分析 - 销售产品分析
     * @Author pym
     * @Date  2021/9/27 14:48
     * @param analyseReturnMoneyProductQO -查询条件
     * @param order - 排序
     * @param accountId - 账号Id
     * @return {@link {java.util.List<com.crm.model.vo.productManager.AnalyseReturnMoneyProductVO>}}
     */
    List<AnalyseReturnMoneyProductVO> selectReturnMoneyProductList(@Param("analyseReturnMoneyProductQO") AnalyseReturnMoneyProductQO analyseReturnMoneyProductQO,
                                                                   @Param("order") String order, @Param("accountId") String accountId);

    List<ReturnMoney> selectReturnMoneyNoCustomer(@Param("companyId") String companyId);

    /**
     * 批量补充回款表客户信息(临时用补充正式库数据:customer_id;customer_name为空的)
     * @param returnMoneyList
     * @author yincuimei
     * @Date(2021-9-26)
     * @return
     */
    int batchUpdateReturnMoneyByOrderNumber(@Param("returnMoneyList")List<ReturnMoney> returnMoneyList);

    /**
     * 通过finish查询回款信息
     * @param finishId
     * @return
     */
    List<ReturnMoneyVO> selectReturnMoneyByFinishId(@Param("finishId") String finishId);

    /**
     * 会员产品数量和销售额度
     * @Author pym
     * @Date  2021/10/21 10:06
     * @param accountId 账号Id
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return {@link {com.crm.model.vo.productManager.PerformanceAnalysisVO}}
     */
    PerformanceAnalysisVO selectMemberProductCountAndPrice(@Param("accountId") String accountId, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 非会员产品数量和销售额度
     * @Author pym
     * @Date  2021/10/21 10:07
     * @param accountId 账号Id
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return {@link {com.crm.model.vo.productManager.PerformanceAnalysisVO}}
     */
    PerformanceAnalysisVO selectNonMemberProductCountAndPrice(@Param("accountId") String accountId, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 年度会员产品数量和销售额度
     * @Author pym
     * @Date  2021/10/21 10:07
     * @param accountId 账号Id
     * @param year 年份
     * @return {@link {java.util.List<com.crm.model.vo.productManager.PerformanceAnalysisVO>}}
     */
    List<PerformanceAnalysisVO> selectYearMemberProductCountAndPrice(@Param("accountId") String accountId, @Param("year") Date year);

    /**
     * 年度非会员产品数量和销售额度
     * @Author pym
     * @Date  2021/10/21 10:08
     * @param accountId 账号Id
     * @param year 年份
     * @return {@link {java.util.List<com.crm.model.vo.productManager.PerformanceAnalysisVO>}}
     */
    List<PerformanceAnalysisVO> selectYearNonMemberProductCountAndPrice(@Param("accountId") String accountId, @Param("year") Date year);

    /**
     * 查询订单的附加费用回款金额
     * @param productOrderId
     * @return
     */
    BigDecimal selectOrderSurchargeCount(@Param("orderId") String productOrderId);

    /**
     * 通过产品号查询回款记录
     * @param finishOrderProductNum 产品号
     * @return
     */
    ReturnMoney selectReturnMoneyByFinishNum(@Param("finishOrderProductNum")String finishOrderProductNum);

    /**
     * 双十一报表
     * @param entryArea
     * @param month
     * @return
     */
    List<PerformanceRankVO> reportForNovember(@Param("entryArea")String entryArea, @Param("year")String year, @Param("month")String month, @Param("day")String day);

    /**
     * 根据订单id查询最后一次回款时间
     * @Param orderId
     * @Param orderBy
     * @Author xielinqi
     * @Date 2:40 下午 2021/11/8
     */
    ReturnMoney selectLastByOrderId(@Param("orderId") String orderId, @Param("orderBy") String orderBy);

    /**
     * 根据产品号查询最后一次回款时间
     * @Param finishOrderProductNum
     * @Author xielinqi
     * @Date 2:40 下午 2021/11/8
     */
    ReturnMoney selectLastByFinishOrderProductNum(String finishOrderProductNum);

    /**
     * 根据订单id查询一条未封账的回款记录
     * @Param productOrderId
     * @Author xielinqi
     * @Date 4:39 下午 2021/11/9
     */
    ReturnMoney getNoCloseOne(String productOrderId);

    /**
     * 根据订单id查询一条封账的回款记录
     * @Param productOrderId
     * @Author xielinqi
     * @Date 5:44 下午 2021/11/9
     */
    ReturnMoney getCloseOne(String productOrderId);

    /**
     * 根据订单查询回款记录
     * @Param productOrderId
     * @Author xielinqi
     * @Date 9:09 上午 2021/11/19
     */
    List<ReturnMoneyVO> selectListByOrderId(String productOrderId);


    /**
     * 查询订单总预回款金额
     * @param orderId
     * @param finishOrderProductNum
     * @return
     */
    BigDecimal queryPreRetunmoneyTotal(@Param("orderId")String orderId,@Param("finishOrderProductNum")String finishOrderProductNum);

    /**
     * 发放状态为已发放的
     * @param productOrderId 订单id
     * @param royaltyStatus 提成发放状态 0 未发放 1已发放
     * @return
     */
    ReturnMoney selectReturnByRoyaltyStatus(@Param("productOrderId") String productOrderId,@Param("royaltyStatus") int royaltyStatus);

    /**
     * 查询产品回款金额含预回款
     * @param finishOrderProductNum
     * @return
     */
    BigDecimal selectOrderProductReturnMoneyAllCount(@Param("finishOrderProductNum") String finishOrderProductNum,@Param("orderId") String orderId);
}
